﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace AudiPyme.BLL
{
    //Clase utilizada en el algoritmo de cálculo de riesgos que recoge los controles que no se cumplen o se cumplen parcialmente 
    //para una amenaza dada y la cobertura de los mismos, así como el nivel de riesgo generado para el activo al que esté asociado
    public class NivelRiesgo : IComparable
    {
        int idAmenaza;
        List<ControlesCheckList> controlesNoParc;
        int coberturaNivelAmenaza;
        int coberturaProbabVuln;
        int nivelRiesgoActivo;

        public NivelRiesgo()
        {
            idAmenaza = 0;
            controlesNoParc = new List<ControlesCheckList>();
            coberturaNivelAmenaza = -1;
            coberturaProbabVuln = -1;
            nivelRiesgoActivo = 0;
        }
        public NivelRiesgo(int idAmenaza, List<ControlesCheckList> controlesNoParc)
        {
            this.idAmenaza = idAmenaza;
            this.controlesNoParc = controlesNoParc;
        }
        public NivelRiesgo(int idAmenaza, List<ControlesCheckList> controlesNoParc, int nivelRiesgo)
        {
            this.idAmenaza = idAmenaza;
            this.controlesNoParc = controlesNoParc;
            this.nivelRiesgoActivo = nivelRiesgo;
        }

        public int IdAmenaza
        {
            get { return idAmenaza; }
            set { idAmenaza = value; }
        }

        public List<ControlesCheckList> ControlesNoParc
        {
            get { return controlesNoParc; }
            set { controlesNoParc = value; }
        }

        public int CoberturaNivelAmenaza
        {
            get { return coberturaNivelAmenaza; }
            set { coberturaNivelAmenaza = value; }
        }

        public int CoberturaProbabVuln
        {
            get { return coberturaProbabVuln; }
            set { coberturaProbabVuln = value; }
        }

        public int NivelRiesgoActivo
        {
            get { return nivelRiesgoActivo; }
            set { nivelRiesgoActivo = value; }
        }
        public int CompareTo(object obj)
        {
            NivelRiesgo otroNivelRiesgo = obj as NivelRiesgo;
            if (otroNivelRiesgo == null)
            {
                return 0;
            }
            switch (NivelRiesgoActivo.CompareTo(otroNivelRiesgo.NivelRiesgoActivo))
            {
                case 1:
                    return -1;
                case -1:
                    return 1;
                default:
                    return NivelRiesgoActivo.CompareTo(otroNivelRiesgo.NivelRiesgoActivo);
            }
        }
    }
}
